home *** CD-ROM | disk | FTP | other *** search
- /*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
- | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved
- |
- | This Library is part of IDC's TesSeRact Development Tools product
- | line. For information about other IDC products, call 1-215-884-3373.
- *----------------------------------------------------------------------*
- | <TCXLkey.h> : Public definitions and prototypes for TCXL Input system.
- | (Middle level).
- *-------------------------------[ Notes ]------------------------------*
- | 1) Almost all of the keyboard-access functions are MS-DOS dependent.
- *----------------------------------------------------------------------*
- | PGS : $Id: tcxlkey.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $
- | $Log: tcxlkey.h $
- | Revision 5.51 90/10/01 00:00:00 MLM
- | TCXL 5.51
- |
- *======================================================================*/
- #ifndef _TCXLkey_
- # define _TCXLkey_ 1
- # ifndef _TCXLdef_
- # include <TCXLdef.h> /* standard definitions */
- # endif
- /*- KeyStat() return bits (MS-DOS) -------*/
- #define KEY_RSH 0x01 /* [right shift] pressed */
- #define KEY_LSH 0x02 /* [left shift] pressed */
- #define KEY_CTL 0x04 /* [Ctrl] pressed */
- #define KEY_ALT 0x08 /* [Alt] pressed */
- #define KEY_SCR 0x10 /* [Scroll Lock] toggled */
- #define KEY_NUM 0x20 /* [Num Lock] toggled */
- #define KEY_CAP 0x40 /* [Caps Lock] toggled */
- #define KEY_INS 0x80 /* [Ins] toggled */
-
- #define KEY_EXT 0x80 /* KctlFlg = extended functions */
- #define KEY_MNU 0x01 /* KctlFlg = currently in menu */
- #define KEY_KBD 0x00 /* KctlSrc = keyboard */
- #define KEY_QUE 0x01 /* KctlSrc = key-queue */
- #define KEY_MOU 0x02 /* KctlSrc = mouse */
- #define KEY_MAX 128 /* size of key-queue */
- #define KEY_BRK 0xFFFF /* ^Break return from _KeyHit()/_KeyGet() */
-
- /*------------------[ Data objects and access macros ]------------------*/
-
- TYP union Kcod KcodT, *KcodP;
- TYP struct Kctl KctlT, *KctlP;
- TYP struct Kbnd KbndT, *KbndP;
-
- union Kcod /*-[ Complete keycode ]----------*/
- { KeyT ckey; /* 00|00 : word overlay */
- struct /* */
- { BytT asc; /* 00|00 : ASCII char or 0=ext */
- BytT scn; /* 01|01 : scancode */
- } c; /* */
- }; /* 02|02 ]-----------------------*/
- #define KcodKey(x) ((x).ckey)
- #define KcodAsc(x) ((x).c.asc)
- #define KcodScn(x) ((x).c.scn)
-
- struct Kbnd /*-[ Key-binding object ]--------*/
- { KbndP bptr; /* 00|00 : next binding */
- VfvCP bfun; /* 02|04 : bound function */
- KeyT bkey; /* 04|08 : bound keycode */
- KeyT brtn; /* 06|0C : return keycode */
- }; /* 08|0E ]-----------------------*/
- #define KbndPtr(b) ((b)->bptr)
- #define KbndFun(b) ((b)->bfun)
- #define KbndKey(b) ((b)->bkey)
- #define KbndRtn(b) ((b)->brtn)
-
- struct Kctl /*-[ Key-control object ]--------*/
- { BytT kflg; /* 00|00 : control-flag */
- BytT ksrc; /* 01|01 : keycode source */
- IntT kbeg; /* 02|02 : key-queue head */
- IntT kend; /* 04|04 : key-queue tail */
- IntT kcnt; /* 06|06 : key-queue count */
- IntT kmax; /* 08|08 : key-queue size */
- KeyP kbas; /* 0A|0A : key-queue base */
- KbndP kbnd; /* 0C|0E : key-binding list */
- VfvCP kidl; /* 0E|12 : idle-loop function */
- KeyT khlp; /* 10|16 : help keycode */
- VfvCP kfun; /* 12|18 : help function */
- }; /* 14|1C ]-----------------------*/
-
- GBL KctlT CDC _KeyCtl; /*- global key-control object ------------*/
- #define KctlFlg (_KeyCtl.kflg) /* control-flag */
- #define KctlMnu (0 != (KctlFlg & KEY_MNU)) /* in-menu */
- #define KctlExt (0 != (KctlFlg & KEY_EXT)) /* extended */
- #define KctlSrc (_KeyCtl.ksrc) /* keycode-source */
- #define KctlKbd (KctlSrc == KEY_KBD) /* keyboard */
- #define KctlQue (KctlSrc == KEY_QUE) /* key-queue */
- #define KctlMou (KctlSrc == KEY_MOU) /* mouse */
- #define KctlBeg (_KeyCtl.kbeg) /* queue-head */
- #define KctlEnd (_KeyCtl.kend) /* queue-tail */
- #define KctlCnt (_KeyCtl.kcnt) /* queue-count */
- #define KctlMax (_KeyCtl.kmax) /* queue-size */
- #define KctlBas (_KeyCtl.kbas) /* queue-base */
- #define KctlBnd (_KeyCtl.kbnd) /* binding list */
- #define KctlIdl (_KeyCtl.kidl) /* idle function */
- #define KctlHlp (_KeyCtl.khlp) /* help keycode */
- #define KctlFun (_KeyCtl.kfun) /* help function */
-
- GBL KeyT CDC _KeyQue[]; /*- global key-queue ---------------------*/
-
- /*------------------------[ Function prototypes ]-----------------------*/
-
- #ifdef __cplusplus /* no mangling, please */
- extern "C" {
- #endif
- /*- Input to active window ------*/
- IntT CTYP KwGetCf(ChrP v, IntT d); /* Get valid key */
- IntT CTYP KwGetCh(NOARG); /* Get key */
- IntT CTYP KwGetFmt(ChrP s, ChrP f); /* Get TCXL formatted string */
- IntT CTYP KwGetSn(ChrP s, IntT m); /* Get limited string */
- IntT CTYP KwGetSt(ChrP ps); /* Get string */
- IntT CTYP KwGetYn(IntT cd); /* Get Y|N answer */
- #ifdef __TURBOC__
- IntT CDC KwScanf(ChrP fs, ...); /* Get scanf() string */
- #endif
- /*- Input to default video ------*/
- IntT CTYP KvGetCf(ChrP v, IntT d); /* Get valid key */
- IntT CTYP KvGetCh(NOARG); /* Get key */
- IntT CTYP KvGetFmt(ChrP s, ChrP f); /* Get TCXL formatted string */
- IntT CTYP KvGetSn(ChrP s, IntT m); /* Get limited string */
- VOID CTYP KvGetSt(ChrP ps); /* Get string */
- IntT CTYP KvGetYn(IntT cd); /* Get Y|N answer */
- #ifdef __TURBOC__
- VOID CDC KvScanf(ChrP fs, ...); /* Get scanf() string */
- #endif
- /*- Asynchronous input ----------*/
- KbndP CTYP KbndChg(KbndP l); /* Swap binding-stack pointers */
- IntT CTYP KbndClr(KeyT k); /* Unbind key */
- VOID CTYP KbndFre(NOARG); /* Free all stacked key-bindings */
- VOID KbndIdle(VfvCP a); /* Assign idle-loop function */
- IntT CTYP KbndSet(KeyT k, VfvCP f, /* Bind key to function & return */
- KeyT r);
- /*- Input, no echo --------------*/
- VOID KeyClear(NOARG); /* Clear keyboard */
- IntT CTYP KeyEvent(NOARG); /* Detect key event */
- KeyT CTYP KeyGetc(NOARG); /* Get key/mouse event */
- KeyT KeyPeek(NOARG); /* Peek at waiting keycode */
- WrdT KeyStat(NOARG); /* Get keyboard status */
- KeyT CTYP KeyTime(IntT t); /* Wait for key or time-out */
- KeyT KeyWait(NOARG); /* Wait for key */
- /*- TCXL key-queue --------------*/
- IntT KqueChk(NOARG); /* Test for enqueued keycodes */
- VOID PAS KqueClr(NOARG); /* Clear FIFO queue */
- KeyT PAS KqueGet(NOARG); /* Get key at head of queue */
- IntT PAS KquePut(KeyT k); /* Put key on tail of queue */
- IntT CTYP KqueStr(ChrP s); /* Add string to tail of queue */
- /*- Keyboard access (MS-DOS) ----*/
- WrdT PAS _KeySta(NOARG); /* Get keyboard status */
- VOID PAS _KeySet(IntT b, IntT s); /* Toggle keyboard state */
- IntT PAS _KeyExt(NOARG); /* Test for extended BIOS */
- KeyT PAS _KeyGet(NOARG); /* Get waiting key via BIOS */
- KeyT PAS _KeyHit(NOARG); /* Test for waiting key via BIOS */
- VOID KcapOff(NOARG); /* CapsLock ON */
- VOID KcapOn(NOARG); /* CapsLock OFF */
- VOID KextOff(NOARG); /* Extended BIOS support OFF */
- VOID KextOn(NOARG); /* Extended BIOS support ON */
- VOID KinsOff(NOARG); /* Insert OFF */
- VOID KinsOn(NOARG); /* Insert ON */
- VOID KnumOff(NOARG); /* NumLock OFF */
- VOID KnumOn(NOARG); /* NumLock ON */
- IntT CTYP KscnCod(IntT c); /* Return scan-code for ASCII */
- #define KbndIdle(a) (KctlIdl = a)
- #define KcapOff() (_KeySet(KEY_CAP, 0))
- #define KcapOn() (_KeySet(KEY_CAP, 1))
- #define KextOff() (KctlFlg &= ~KEY_EXT)
- #define KextOn() if(TcxlKey) KctlFlg |= KEY_EXT
- #define KeyClear() while(_KeyHit()) _KeyGet()
- #define KeyStat() (_KeySta())
- #define KeyPeek() (_KeyHit())
- #define KeyWait() (KeyTime(-1))
- #define KinsOff() (_KeySet(KEY_INS, 0))
- #define KinsOn() (_KeySet(KEY_INS, 1))
- #define KnumOff() (_KeySet(KEY_NUM, 0))
- #define KnumOn() (_KeyNum(KEY_NUM, 1))
- #define KqueChk() (KctlCnt > 0)
- #ifdef __cplusplus
- }
- #endif
- #endif /* _TCXLkey_ : End of TCXLkey.h */